package com.ruoyi.basicsystem.service;

import java.util.List;
import java.util.Map;

import com.ruoyi.basicsystem.domain.ZnAgreement;
import com.ruoyi.basicsystem.domain.ZnAgreementCustomer;
import com.ruoyi.basicsystem.domain.ZnAgreementDetail;

/**
 * 客户协议价管理Service接口
 * 
 * @author nexiaozi
 * @date 2022-03-25
 */
public interface IZnAgreementService 
{
    /**
     * 查询客户协议价管理
     * 
     * @param id 客户协议价管理主键
     * @return 客户协议价管理
     */
    public ZnAgreement selectZnAgreementById(Long id);

    /**
     * 查询客户协议价管理列表
     * 
     * @param znAgreement 客户协议价管理
     * @return 客户协议价管理集合
     */
    public List<ZnAgreement> selectZnAgreementList(ZnAgreement znAgreement);
     /**
      * 查询客户协议价管理记录数
      *
      * @param znAgreement 客户协议价管理
      * @return 客户协议价管理记录数
     */
    public Integer selectZnAgreementCount(ZnAgreement znAgreement);

    /**
     * 新增客户协议价管理
     * 
     * @param znAgreement 客户协议价管理
     * @return 结果
     */
    public int insertZnAgreement(ZnAgreement znAgreement);

    /**
     * 修改客户协议价管理
     * 
     * @param znAgreement 客户协议价管理
     * @return 结果
     */
    public int updateZnAgreement(ZnAgreement znAgreement);

    /**
     * 批量删除客户协议价管理
     * 
     * @param ids 需要删除的客户协议价管理主键集合
     * @return 结果
     */
    public int deleteZnAgreementByIds(Long[] ids);

    /**
     * 删除客户协议价管理信息
     * 
     * @param id 客户协议价管理主键
     * @return 结果
     */
    public int deleteZnAgreementById(Long id);

    int updateZnAgreementStatusByIds(String status, Long[] ids);

    /**
     * 刷新用户协议价
     * @author nexiaozi
     */
    void refreshEffect();

    int updateCustomerAgreement(ZnAgreement znAgreement);

    /**
     * 修改协议用户
     * @param agreementId
     * @param customerIds
     * @return
     */
    int doCustomer(Long agreementId, Long[] customerIds);

    List<ZnAgreement> selectZnAgreementTreeList(ZnAgreement znAgreement);

    List<ZnAgreementDetail> selectZnAgreementDetailList(ZnAgreement znAgreement);

    /**
     * 查询客户是否配置其他非生效协议
     * @param znAgreement1
     * @return
     */
    List<Map<String, Object>> selectCustomerHaveAgreement(ZnAgreement znAgreement1);

    /**
     * 设置用户关联协议
     * @param znAgreementCustomer
     * @return
     */
    int doCustomer(ZnAgreementCustomer znAgreementCustomer);
}
